package com.ruoyi.web.controller.tool;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.dify.dto.request.DatasetPageRequest;
import com.ruoyi.common.dify.dto.request.DocumentCreateByFileRequest;
import com.ruoyi.common.dify.dto.request.WorkflowRunRequest;
import com.ruoyi.common.dify.dto.response.DatasetResponse;
import com.ruoyi.common.dify.dto.response.DocumentCreateResponse;
import com.ruoyi.common.dify.dto.response.WorkflowRunResponse;
import com.ruoyi.common.dify.enums.IndexingTechniqueEnum;
import com.ruoyi.common.dify.enums.document.DocFormEnum;
import com.ruoyi.common.dify.enums.document.DocTypeEnum;
import com.ruoyi.common.dify.pojo.DifyPageResult;
import com.ruoyi.system.service.DifyDataset;
import com.ruoyi.system.service.DifyWorkflow;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;

/**
 * swagger 用户测试方法
 *
 * @author ruoyi
 */
@Api("用户信息管理")
@RestController
@RequestMapping("/test")
public class TestController extends BaseController {
    @Autowired
    private DifyDataset difyDataset;
    @Autowired
    private DifyWorkflow difyWorkflow;

    @ApiOperation("获取知识库列表")
    @GetMapping("/dataSetList")
    public R<DifyPageResult<DatasetResponse>> dataSetList(@RequestParam Integer page, @RequestParam Integer limit) {
        DatasetPageRequest datasetPageRequest = new DatasetPageRequest();
        datasetPageRequest.setPage(page);
        datasetPageRequest.setLimit(limit);
        DifyPageResult<DatasetResponse> result = difyDataset.page(datasetPageRequest);
        return R.ok(result);
    }

    @ApiOperation("知识库检索")
    @GetMapping("/search")
    public R<WorkflowRunResponse> search(@RequestParam String query, @RequestParam String dataSetId) {
        WorkflowRunRequest workflowRunRequest = new WorkflowRunRequest();
        workflowRunRequest.setUserId("test");
        workflowRunRequest.setApiKey("app-cQadF8fgZ6x0KPhcbwjj0Pyz");
        HashMap<String, Object> mm = new HashMap<>();
        mm.put("query",query);
        mm.put("data_set_id",dataSetId);
        workflowRunRequest.setInputs(mm);
        WorkflowRunResponse workflowRunResponse = difyWorkflow.runWorkflow(workflowRunRequest);

        return R.ok(workflowRunResponse);
    }
    @ApiOperation("上传文件")
    @PostMapping("/uploadDoc")
    public
    R<DocumentCreateResponse> uploadDoc(@RequestPart("file") MultipartFile file,
                                        @RequestPart("dataSetId") String dataSetId){
        DocumentCreateByFileRequest documentCreateByFileRequest = new DocumentCreateByFileRequest();
        documentCreateByFileRequest.setDatasetId(dataSetId);
        documentCreateByFileRequest.setDocType(DocTypeEnum.personal_document);
        //documentCreateByTextRequest.setDocMetadata(Map.of("key", "test"));
        documentCreateByFileRequest.setIndexingTechnique(IndexingTechniqueEnum.ECONOMY);
        documentCreateByFileRequest.setDocForm(DocFormEnum.text_model);
        documentCreateByFileRequest.setDocLanguage("Chinese");

        documentCreateByFileRequest.setName("货物信息审核规则");
        HashMap<String, Object> mm = new HashMap<>();
        mm.put("货物信息审核规则","");
        documentCreateByFileRequest.setDocMetadata(mm);
        documentCreateByFileRequest.setFile(file);
        DocumentCreateResponse documentByFile = difyDataset.createDocumentByFile(documentCreateByFileRequest);
        return R.ok(documentByFile);
    }
//    @ApiOperation("获取用户详细")
//    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
//    @GetMapping("/{userId}")
//    public R<UserEntity> getUser(@PathVariable Integer userId)
//    {
//        if (!users.isEmpty() && users.containsKey(userId))
//        {
//            return R.ok(users.get(userId));
//        }
//        else
//        {
//            return R.fail("用户不存在");
//        }
//    }
//
//    @ApiOperation("新增用户")
//    @ApiImplicitParams({
//        @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class),
//        @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class),
//        @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class),
//        @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class)
//    })
//    @PostMapping("/save")
//    public R<String> save(UserEntity user)
//    {
//        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
//        {
//            return R.fail("用户ID不能为空");
//        }
//        users.put(user.getUserId(), user);
//        return R.ok();
//    }
//
//    @ApiOperation("更新用户")
//    @PutMapping("/update")
//    public R<String> update(@RequestBody UserEntity user)
//    {
//        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
//        {
//            return R.fail("用户ID不能为空");
//        }
//        if (users.isEmpty() || !users.containsKey(user.getUserId()))
//        {
//            return R.fail("用户不存在");
//        }
//        users.remove(user.getUserId());
//        users.put(user.getUserId(), user);
//        return R.ok();
//    }
//
//    @ApiOperation("删除用户信息")
//    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
//    @DeleteMapping("/{userId}")
//    public R<String> delete(@PathVariable Integer userId)
//    {
//        if (!users.isEmpty() && users.containsKey(userId))
//        {
//            users.remove(userId);
//            return R.ok();
//        }
//        else
//        {
//            return R.fail("用户不存在");
//        }
//    }
//}
//
//@ApiModel(value = "UserEntity", description = "用户实体")
//class UserEntity
//{
//    @ApiModelProperty("用户ID")
//    private Integer userId;
//
//    @ApiModelProperty("用户名称")
//    private String username;
//
//    @ApiModelProperty("用户密码")
//    private String password;
//
//    @ApiModelProperty("用户手机")
//    private String mobile;
//
//    public UserEntity()
//    {
//
//    }
//
//    public UserEntity(Integer userId, String username, String password, String mobile)
//    {
//        this.userId = userId;
//        this.username = username;
//        this.password = password;
//        this.mobile = mobile;
//    }
//
//    public Integer getUserId()
//    {
//        return userId;
//    }
//
//    public void setUserId(Integer userId)
//    {
//        this.userId = userId;
//    }
//
//    public String getUsername()
//    {
//        return username;
//    }
//
//    public void setUsername(String username)
//    {
//        this.username = username;
//    }
//
//    public String getPassword()
//    {
//        return password;
//    }
//
//    public void setPassword(String password)
//    {
//        this.password = password;
//    }
//
//    public String getMobile()
//    {
//        return mobile;
//    }
//
//    public void setMobile(String mobile)
//    {
//        this.mobile = mobile;
//    }
}
